# coding=utf-8
import time
from utils.redis import Redis

# 将起始时间字符串转换为时间戳
seconds_begin = time.mktime(time.strptime('2023-12-22 13:00:00', "%Y-%m-%d %H:%M:%S"))
# 基于redis生成全局唯一自增id(类似雪花算法) 当前位图结构为 0+31bits(时间戳)+32bits(自增数量) 0其实就是时间戳的符号位通过位运算得到的，可以忽略
def snow_id_creator(key_profix):
    global seconds_begin
    time_left_bits = 32  # 时间部分左移位数
    # 1 获取id时间部分
    seconds_begin = seconds_begin  # 1.1获取开始时间戳
    seconds_now = time.time()  # 1.2 创建当前时间的时间戳
    time_count = int(seconds_now - seconds_begin)  # 1.3 求出时间戳的差值

    # 2 获取id计数部分
    time_str_now = time.strftime("%Y%m%d", time.localtime(seconds_now))  # 2.1 求出当前的时间字符串
    count = Redis.incrby(key_profix + str(time_str_now))  # 2.1 求出当前的增长数

    # 3 返回计算结果
    return (time_count << time_left_bits) | count
